#ifndef __SCRIPT_STRING_H__
#define __SCRIPT_STRING_H__

/********************************************************
 *	字符串处理函数
 *
 *
 *	author: 朱勋华	2019/4/13
 * ******************************************************/

typedef enum exp_string_type{
	EXP_STRING_TYPE_NONE,
	EXP_STRING_TYPE_NUMBER,
	EXP_STRING_TYPE_STRING,
	EXP_STRING_TYPE_PARENTHESIS,
	EXP_STRING_TYPE_OPERTOR,
}exp_string_type_e;

typedef struct exp_string_t{
	exp_string_type_e type;
	char *str;
	struct exp_string_t *next;
	struct exp_string_t *prev;
}exp_string_t;


/********************************************************
 *	function	uni_strip
 *				去除字符串buf前后的空格和换行符
 *	@buf		input 被处理的字符串
 *	@return		返回处理后的字符串指针
 *
 *	注： 此函数会修改输入的字符串
 * ******************************************************/
char *uni_strip(char *buf);

/********************************************************
 *	function	uni_is_number 
 *				判断字符c是否为数字
 *	@c			input
 *	@return		是数字返回1 不是返回0
 * ******************************************************/
int uni_is_number(char c);
/********************************************************
 *	function	uni_is_letter
 *				判断字符c是否为字母
 *	@c			input
 *	@return		是数字返回1 不是返回0
 * ******************************************************/
int uni_is_letter(unsigned char c);

/********************************************************
 *	function	uni_is_alnum
 *				判断字符c是否为字母或数字
 *	@c			input
 *	@return		是数字返回1 不是返回0
 * ******************************************************/
int uni_is_alnum(char c);

/********************************************************
 *	function	uni_is_hex
 *				判断字符c是否为十六进制数字
 *	@c			input
 *	@return		是数字返回1 不是返回0
 * ******************************************************/
int uni_is_hex(char c);

/********************************************************
 *	function	uni_is_parenthesis
 *				判断字符c是否为括号
 *	@c			input
 *	@return		是数字返回1 不是返回0
 * ******************************************************/
int uni_is_parenthesis(char c);

/********************************************************
 *	function	exp_string_decode
 *		分词函数， 把str字符串分解为字符串链表
 *
 *	@str	待分解的字符串
 *
 *	return 
 *		成功 返回分词的字符串链表
 *		失败 返回NULL
 *
 * ******************************************************/
struct exp_string_t *exp_string_decode(char *str);

/********************************************************
 *	function	exp_lines_decode
 *		按行分词， 把str字符串按行分割为字符串列表
 *
 *	@str	待分解的字符串
 *
 *	return
 *		成功 返回分词后的字符串链表
 *		失败 返回NULL
 * ******************************************************/
struct exp_string_t *exp_lines_decode(char *str);

/********************************************************
 *	function	exp_string_destroy
 *		销毁exp_string_t 链表
 *
 *	@exp_str
 *		待销毁的exp_string_t 指针
 * ******************************************************/
void exp_string_destroy(exp_string_t *exp_str);

/********************************************************
 *	function	script_string_convert
 *		字符串特殊字符转义
 *
 * ******************************************************/
char *script_string_convert(const char *str);

/********************************************************
 *	function	script_string_disconvert
 *		字符串特殊字符解转义
 *
 * ******************************************************/
char *script_string_disconvert(const char *str,int len);

/********************************************************
 *	function	script_string_dump
 *		字符串复制函数
 *
 * ******************************************************/
char *script_string_dump(const char *src);

#endif
